/**
 * JSparrow - Une version numérique du jeu "Attention Pirates !" - Copyright (C) 2014 Black Pearl
 *
 * This program is free software: you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program. If
 * not, see <http://www.gnu.org/licenses/>.
 */
package App.Controleur;

import java.awt.Point;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;

import App.Modele.Bateau;
import App.Modele.Case;
import App.Modele.Configuration;
import App.Modele.Joueur;
import App.Modele.Partie;
import App.Modele.Plateau;
import App.Modele.Repaire;
import App.Modele.TypeCase;
import App.Modele.TypePiece;


/**
 * Classe Controleur
 * @author BlackPearl
 *
 */
public class Jeu extends Observable {

	private Partie partieCourante;
	private ArrayList<Partie> partiesEnregistrees;

	public Jeu() {

	}

	public void envoiListeParties()
	{
		this.partiesEnregistrees = JSparrow_FileSystem.getSavedParties();

		String s = new String();
		for(Partie p : this.partiesEnregistrees)
		{
			s = s + p.getNom() + "-" + p.getNbJoueurs() + "_";
		}
		this.setChanged();
		this.notifyObservers("parties = " + s);
	}
	

	public void sauvegarderPartie() {
		JSparrow_FileSystem.savePartie(this.partieCourante);
	}

	public void chargerPartie(String nomPartie) {
		for (Partie partie : partiesEnregistrees) {
			if(partie.getNom().equals(nomPartie))
			{
				this.partieCourante = partie;
			}
		}
		
		this.setChanged();
		this.notifyObservers("listeBateaux = " + this.partieCourante.getPlateau().toCom());
		this.setChanged();
		this.notifyObservers("scores = " + this.getPartieCourante().toCom());
	}
	public void creerPartie(String nom, int nbJoueurs) {
		partieCourante = new Partie(nom, nbJoueurs);

	}

	public void jouerTour() {
	}

	public String verificationFinJeu() {
		return partieCourante.verificationFinPartie();
	}

	public void quitter() {
	}
	
	public Partie getPartieCourante()
	{
		return this.partieCourante;
	}
	public void ajouterJoueur(String nom) {
		this.partieCourante.ajouterJoueur(nom);
	}

	/**
	 * methode du controleur appelée par les vue pour transmettre les evenements aux controleurs
	 * @param s chaine contenant l action que la vue a envoye et les elements qui sont en lien avec cette action 
	 */
	public void gestionEvenementVue(String s) {
		s= s.replaceAll(" ", ""); // on enleve l espace
		String[] parts = s.split("=");
		String action = parts[0];

		if(action.equals("attaquer")){
			if(parts.length > 1 && parts.length < 3){ // on teste qu'il y a bien un parametre a attaquer
				attaquer(parts[1]);
				/*
				 * TODO: Send new player if turn changed, and send bateau info.
				 */
			}
			else{
				System.out.println("L'action attaquer doit avoir un paramètre, soit une coordonée de repaire, soit un numéro de joueur." );
			}
		}
		else if(action.equals("reparer")){
			if(parts.length > 1 && parts.length < 3){ // on teste qu'il y a bien un parametre a reparer
				reparer(parts[1]);
			}
			else{
				System.out.println("L'action reparer doit avoir en parametre la liste des pieces sur le bateau" );
			}
		}
		else if(action.equals("deplacer")){
			if(parts.length > 1 && parts.length < 3){ // on teste qu'il y a bien un parametre a deplacer
				deplacer(parts[1]);
			}
			else{
				System.out.println("L'action déplacer doit avoir un paramètre (coordonnees de la forme (x;y))" );
			}		
		}
		else if(action.equals("calculCredit")){
			calculCredit();
		}
		else if(action.equals("infoBateau")){
			if(parts.length > 1 && parts.length < 3){ // on teste qu'il y a bien un parametre a checkDeplacer
				infoBateau(parts[1]);
			}
			else{
				System.out.println("L'action infoBateau doit avoir un paramètre, le numero du joueur/bateau dont on veut les informations" );
			}
		}
		else if(action.equals("infoCase")){
			if(parts.length > 1 && parts.length < 3){ // on teste qu'il y a bien un parametre a infocase
				infoCase(parts[1]);
			}
			else{
				System.out.println("L'action infoCase doit avoir un paramètre, la coordonnée de la case dont on veut les informations" );
			}
		}
		else if(action.equals("checkDeplacer")){
			if(parts.length > 1 && parts.length < 3){ // on teste qu'il y a bien un parametre a checkDeplacer
				checkDeplacer(parts[1]);
			}
			else{
				System.out.println("L'action checkDeplacer doit avoir un paramètre (coordonnees de la forme (x;y))" );
			}	
		}
		else if(action.equals("checkAttaquer")){
			if(parts.length > 1 && parts.length < 3){ // on teste qu'il y a bien un parametre a attaquer
				checkAttaque(parts[1]);
			}
			else{
				System.out.println("L'action checkAttaquer doit avoir un paramètre, soit une coordonée de repaire, soit un numéro de joueur." );
			}
		}
		else if(action.equals("sauvegarder")){
			this.sauvegarderPartie();
		}
		/*else if(action.equals("lancerPartie")){
			if(parts.length > 1 && parts.length < 3){ // on teste qu'il y a bien un parametre a lancerPartie
				lancerPartie(parts[1]);
			}
			else{
				System.out.println("L'action lancerPartie doit avoir un paramètre" );
			}
		}
		else if(action.equals("reprendrePartie")){
			
		}*/
		else if(action.equals("quitter")){
			
		}
		else{
			System.out.println("L'action "+action+" n'existe pas." );
		}
	}

	public void updateActionsDisponibles() {
		
	}

	/**
	 * methode permettant au joueur courant d'attaquer une cible (repaire ou bateau)
	 * @param cibleChaine contient une chaine de caractère indiquant la cible, il faut une chaine de caractere au format "(x;y)" pour un repaire ou une chaine de caractère ne contenant qu'un entier pour un bateau
	 */
	public void attaquer(String cibleChaine) {
		Bateau attaquant = partieCourante.getJoueur().getBateau();	
		if(cibleChaine.matches("\\([0-9];[0-9]\\)"))// si c'est un repaire qui est attaque
		{
			cibleChaine = cibleChaine.replaceAll("\\(|\\)", ""); // on enleve les parantheses et les espaces
			String[] coordonneesString= cibleChaine.split(";"); // on separe X et Y
			Point coordonnee = new Point(Integer.parseInt(coordonneesString[0]), Integer.parseInt(coordonneesString[1]));
			Repaire cible = partieCourante.getPlateau().getRepaire(coordonnee);
			if(cible != null){
				if(partieCourante.getPlateau().attaquer(attaquant, cible)){// on teste si l'attaque a reussi
					System.out.println("attaque du joueur "+ this.partieCourante.getJoueur().getNom() + " sur le repaire de la case ("+coordonneesString[0]+";"+coordonneesString[1]+")");
					System.out.println("BATEAU_ATTAQUANT.peutattaquer=" + this.partieCourante.getJoueur().getBateau().peutAttaquer() + "   nbPiratesCibles=" + cible.getNbPirates());
					if(this.partieCourante.getJoueur().getBateau().peutAttaquer() && cible.getNbPirates() == 0)
					{
						this.partieCourante.getJoueur().getBateau().prendreTresor(cible.getNbTresors());
						System.out.println("Vol des Tresors" + this.partieCourante.getJoueur().getBateau().toString());
						cible.setNbTresors(0);
						//this.partieCourante.getJoueur().getBateau().getArrayPiece()[5] = TypePiece.Tresor;
					}
					if(this.partieCourante.getActionEnCours() == 0){
						this.setChanged();
						this.notifyObservers("checkReparer = y");
					}
					this.incActionEnCours();
				}
				else{
					System.out.println("Le joueur "+ this.partieCourante.getJoueur().getNom() + " ne peut pas attaquer le repaire de la case ("+coordonneesString[0]+";"+coordonneesString[1]+")");
				}
			}
			else{
				System.out.println("Aucun repaire n'existe sur la case ("+coordonneesString[0]+";"+coordonneesString[1]+")");
			}
		}
		else if(cibleChaine.matches("[0-9]")){ // si c'est un bateau
			int numJoueur = Integer.parseInt(cibleChaine);
			Joueur joueurCible = partieCourante.getJoueur(numJoueur);
			if(joueurCible != null){ // on teste si le joueur existe
				Bateau cible = joueurCible.getBateau();
				if(partieCourante.getPlateau().attaquer(attaquant, cible)){ // on teste si l'attaque a reussi
					System.out.println("attaque du joueur "+ this.partieCourante.getJoueur().getNom() + " sur le bateau du joueur "+ joueurCible.getNom());
					if(this.partieCourante.getJoueur().getBateau().peutAttaquer() && cible.getNbPirates() == 0)
					{
						this.partieCourante.getJoueur().getBateau().prendreTresor(cible.getNbTresors());
						cible.setNbTresors(0);
						//this.partieCourante.getJoueur().getBateau().getArrayPiece()[5] = TypePiece.Tresor;
					}
					if(this.partieCourante.getActionEnCours() == 0){
						this.setChanged();
						this.notifyObservers("checkReparer = y");
					}
					this.incActionEnCours();
				}
				else{
					System.out.println("Le joueur "+ this.partieCourante.getJoueur().getNom() + " ne peut pas attaquer le bateau du joueur "+ joueurCible.getNom());
				}
			}
			else{
				System.out.println("Le joueur cible n'existe pas");
			}
		}
		else{ // si le parametre ne contient pas un bateau ou un repaire
			System.out.println("Le parametre de l'action attaquer ne correspond ni a un numero de joueur, ni a une coordonnee de repaire." );
		}
	}
	
	/**
	 * methode permettant au controleur d'indiquer si un joueur peut attaquer un autre bateau ou un repaire 
	 * @param cibleChaine contient une chaine de caractère indiquant la cible, il faut une chaine de caractere au format "(x;y)" pour un repaire ou une chaine de caractère ne contenant qu'un entier pour un bateau
	 */
	public void checkAttaque(String cibleChaine)
	{
		Bateau attaquant = partieCourante.getJoueur().getBateau();	
		if(cibleChaine.matches("\\([0-9];[0-9]\\)"))// si c'est un repaire qui est attaque
		{
			String originalChaine = cibleChaine;
			cibleChaine = cibleChaine.replaceAll("\\(|\\)", ""); // on enleve les parantheses et les espaces
			String[] coordonneesString= cibleChaine.split(";"); // on separe X et Y
			Point coordonnee = new Point(Integer.parseInt(coordonneesString[0]), Integer.parseInt(coordonneesString[1]));
			Repaire cible = partieCourante.getPlateau().getRepaire(coordonnee);
			if(cible != null){
				if(partieCourante.getPlateau().checkAttaque(attaquant, cible) && !Configuration.EmplacementsPort.contains(attaquant.getEmplacement())){// on teste si l'attaque est possible
					System.out.println("Le joueur "+ this.partieCourante.getJoueur().getNom() + " peut attaquer le repaire de la case ("+coordonneesString[0]+";"+coordonneesString[1]+")");
					this.setChanged();
					this.notifyObservers("checkAttaque = y _ " + originalChaine);
				}
				else{
					System.out.println("Le joueur "+ this.partieCourante.getJoueur().getNom() + " ne peut pas attaquer le repaire de la case ("+coordonneesString[0]+";"+coordonneesString[1]+")");
					this.setChanged();
					this.notifyObservers("checkAttaque = n _ " + originalChaine);
				}
			}
			else{
				System.out.println("Aucun repaire n'existe sur la case ("+coordonneesString[0]+";"+coordonneesString[1]+")");
				this.setChanged();
				this.notifyObservers("checkAttaque = n _ " + originalChaine);
			}
		}
		else if(cibleChaine.matches("[0-9]")){ // si c'est un bateau
			int numJoueur = Integer.parseInt(cibleChaine);
			Joueur joueurCible = partieCourante.getJoueur(numJoueur);
			if(joueurCible != null){ // on teste si le joueur existe
				Bateau cible = joueurCible.getBateau();
				if(partieCourante.getPlateau().checkAttaque(attaquant, cible)){
					System.out.println("Le joueur "+ this.partieCourante.getJoueur().getNom() + " peut attaquer le bateau du joueur "+ joueurCible.getNom());// on teste si l'attaque est possible
					this.setChanged();
					this.notifyObservers("checkAttaque = y _ " + numJoueur);
				}
				else{
					System.out.println("Le joueur "+ this.partieCourante.getJoueur().getNom() + " ne peut pas attaquer le bateau du joueur "+ joueurCible.getNom());
					this.setChanged();
					this.notifyObservers("checkAttaque = n _ " + numJoueur);
				}
			}
			else{
				System.out.println("Le joueur cible n'existe pas");
			}
		}
		else{ // si le parametre ne contient pas un bateau ou un repaire
			System.out.println("Le parametre de l'action checkAttaque ne correspond ni a un numero de joueur, ni a une coordonnee de repaire." );
		}
	}

	/**
	 * methode permettant au controleur de deplacer le joueur courant en ayant pour parametre une coordonnee de type string du format (x;y)
	 * @param coordonnee,  string au format (x;y)
	 */
	public void deplacer(String coordonnee) {
		if(coordonnee.matches("\\([0-9];[0-9]\\)") && this.partieCourante.getActionEnCours()==0)// test pour savoir si on a bien une coordonee en entrée
		{
			String coordonneeOriginal = coordonnee;
			coordonnee = coordonnee.replaceAll("\\(|\\)", ""); // on enleve les parantheses et les espaces
			String[] coordonneesString= coordonnee.split(";"); // on separe X et Y
			Point point = new Point(Integer.parseInt(coordonneesString[0]), Integer.parseInt(coordonneesString[1]));
			if(this.partieCourante.getPlateau().deplacerBateau(this.partieCourante.getJoueur().getBateau(), point)){
				if(this.partieCourante.getJoueur().getBateau().getArrayPiece()[5] == TypePiece.Tresor && Configuration.EmplacementsPort.contains(this.partieCourante.getJoueur().getBateau().getEmplacement()))
				{
					this.partieCourante.getJoueur().setScore(this.partieCourante.getJoueur().getScore()+this.getPartieCourante().getJoueur().getBateau().getNbTresors());
					this.partieCourante.getJoueur().getBateau().setNbTresors(0);
					envoiScore();
				}
				System.out.println("Le joueur "+ this.partieCourante.getJoueur().getNom() + " a été déplacer à la coordonnée ("+coordonneesString[0]+";"+coordonneesString[1]+")");
				this.incActionEnCours();
				this.setChanged();
				this.notifyObservers("checkDeplace = n _ " + coordonneeOriginal);
				this.setChanged();
				this.notifyObservers("listeBateaux = " + this.partieCourante.getPlateau().toCom());
				this.setChanged();
				this.notifyObservers("checkReparer = y");
			}
			else{
			System.out.println("Le joueur "+ this.partieCourante.getJoueur().getNom() + " ne peut pas etre déplacé à la coordonnée ("+coordonneesString[0]+";"+coordonneesString[1]+")");
			}
		}
		else{
			System.out.println("Le parametre de l'action deplacer ne correspond pas a une coordonnée.");
		}
	}
	
	/**
	 * methode permettant au controleur de savoir si le joueur courant peut se déplacer sur la case en parametre 
	 * @param coordonnee,  string au format (x;y) contenant les coordonnées de la case où le joueur souhaiterait se déplacer
	 */
	public void checkDeplacer(String coordonnee)
	{
		if(coordonnee.matches("\\([0-9];[0-9]\\)") && this.partieCourante.getActionEnCours() == 0)// test pour savoir si on a bien une coordonee en entrée
		{
			String originalChaine = coordonnee;
			coordonnee = coordonnee.replaceAll("\\(|\\)", ""); // on enleve les parantheses et les espaces
			String[] coordonneesString= coordonnee.split(";"); // on separe X et Y
			Point destination = new Point(Integer.parseInt(coordonneesString[0]), Integer.parseInt(coordonneesString[1]));
			if(this.partieCourante.getPlateau().checkDeplacement(destination, this.partieCourante.getJoueur().getBateau())){
				System.out.println("Le joueur "+ this.partieCourante.getJoueur().getNom() + " peut se déplacer sur la case ("+coordonneesString[0]+";"+coordonneesString[1]+")");
				this.setChanged();
				this.notifyObservers("checkDeplace = y _ " + originalChaine);
			}
			else{
				System.out.println("Le joueur "+ this.partieCourante.getJoueur().getNom() + " ne peut pas etre déplacé à la coordonnée ("+coordonneesString[0]+";"+coordonneesString[1]+")");
				this.setChanged();
				this.notifyObservers("checkDeplace = n _ " + originalChaine);
			}
		}
		else{
			System.out.println("Le parametre de l'action checkDeplacer ne correspond pas a une coordonnée.");
			this.setChanged();
			this.notifyObservers("checkDeplace = n _ " + coordonnee);
		}
	}
	
	/**
	 * Calcul le nombre de credit disponible en fonction des coordonnees du joueur
	 */
	public void calculCredit()
	{
		Bateau bateau = partieCourante.getJoueur().getBateau(); // on recupere le bateau du joueur actuel
		Plateau plateau=partieCourante.getPlateau();
		int nbCredit = plateau.getNbCreditReparation(bateau); // on recupere le nombre de crédit de réparation
		System.out.println(partieCourante.getJoueur().getNom() +" possède "+nbCredit+ " crédits de réparation");
		this.setChanged();
		this.notifyObservers("credits = " + nbCredit+ ";"+bateau.toCom());
	}
	
	/**
	 * fonction permettant de reparer/configurer un bateau
	 * @param listePieces 
	 */
	public void reparer(String listePieces)
	{
		String[] tableauPieces = listePieces.split("-");
		if(this.partieCourante.getActionEnCours()==1 || this.partieCourante.configurationEnCours())
		{
			if(tableauPieces.length == 6){ // on verifie que le tableau contient bien tout les emplacements
				Bateau bateau = partieCourante.getJoueur().getBateau(); // on recupere le bateau du joueur actuel
				TypePiece[] arrayPiece = new TypePiece[6];
				int nbCanons = 0, nbPirates = 0;
				for(int i= 0; i < 6; i++){
					if(Integer.parseInt(tableauPieces[i]) == 0){
						arrayPiece[i] = TypePiece.Vide;
					}
					else if(Integer.parseInt(tableauPieces[i]) == 1){
						arrayPiece[i] = TypePiece.Pirate;
						nbPirates++;
					}
					else if(Integer.parseInt(tableauPieces[i]) == 2){
						arrayPiece[i] = TypePiece.Canon;
						nbCanons++;
					}
					else if(Integer.parseInt(tableauPieces[i]) == 3 ){ 
						if(i == 5){// le tresor ne peut etre qu'au 6eme emplacement
							arrayPiece[i] = TypePiece.Tresor;
						}
						else{
							System.out.println("Le tresor ne peut etre qu'au 6eme emplacement");
						}
					}
					else{
						System.out.println("Probleme dans la reparation,vide = 0, pirate = 1, canon = 2, tresor = 3");
					}
					if(i == 5 && Integer.parseInt(tableauPieces[i]) != 3)// si le 6eme emplacement ne possede pas de tresor, le bateau possede 0 tresor
					{
						bateau.setNbTresors(0);
					}
				}
				bateau.reparer(arrayPiece);
				bateau.setNbCanons(nbCanons);
				bateau.setNbPirates(nbPirates);
				System.out.println("La réparation est effectuée");
				
				this.setChanged();
				this.notifyObservers("bateau = " + bateau.toCom());
				if(this.partieCourante.getActionEnCours()==1)
				{
					this.incActionEnCours();
				}
			}
			else{
				System.out.println("Il n'y pas le bon nombre de pièces, il doit y avoir 6 pièces sur le bateau.");
			}		
		}
		
	}
	
	/**
	 * Methode permettant de recevoir les informations du bateau en parametre
	 * @param numBateau
	 */
	public void infoBateau(String numBateau) {
		System.out.println("INFOBATEAU");
		if(numBateau.matches("[0-9]")){ // si c'est un bateau
			int numJoueur = Integer.parseInt(numBateau);
			Joueur joueur = partieCourante.getJoueur(numJoueur);
			System.out.println("numJoueur::::::::" + numJoueur + "    joueur:" + joueur.getID());
			if(joueur != null){ // on teste si le joueur existe
				Bateau bateau = joueur.getBateau();
				System.out.println(bateau.toString());
				this.setChanged();
				System.out.println("toCom: " + bateau.toCom());
				this.notifyObservers("bateau = " + bateau.toCom());
			}
			else{
				System.out.println("Le bateau n'existe pas");
			}
		}
		else{
			System.out.println("Il faut rentrer un numéro de bateau/joueur");
		}
		
	}
	
	/**
	 * Methode permettant de recevoir les informations du bateau en parametre
	 * @param numBateau
	 */
	public void infoCible(String numBateau) {
		System.out.println("INFOBATEAU");
		if(numBateau.matches("[0-9]")){ // si c'est un bateau
			int numJoueur = Integer.parseInt(numBateau);
			Joueur joueur = partieCourante.getJoueur(numJoueur);
			System.out.println("numJoueur::::::::" + numJoueur + "    joueur:" + joueur.getID());
			if(joueur != null){ // on teste si le joueur existe
				Bateau bateau = joueur.getBateau();
				System.out.println(bateau.toString());
				this.setChanged();
				System.out.println("toCom: " + bateau.toCom());
				this.notifyObservers("bateauCible = " + bateau.toCom());
			}
			else{
				System.out.println("Le bateau n'existe pas");
			}
		}
		else{
			System.out.println("Il faut rentrer un numéro de bateau/joueur");
		}
		
	}
	
	/**
	 * 
	 * Methode permettant de recevoir les informations sur une case
	 * @param coordonnee
	 */
	public void infoCase(String coordonnee) {
		if(coordonnee.matches("\\([0-9];[0-9]\\)"))// test pour savoir si on a bien une coordonee en entrée
		{
			coordonnee = coordonnee.replaceAll("\\(|\\)", ""); // on enleve les parantheses et les espaces
			String[] coordonneesString= coordonnee.split(";"); // on separe X et Y
			Point point = new Point(Integer.parseInt(coordonneesString[0]), Integer.parseInt(coordonneesString[1]));
			Plateau plateau=partieCourante.getPlateau();
			System.out.println(plateau.getCase(point).toString());
			Repaire repaire = plateau.getRepaire(point);
			if(repaire != null){
				System.out.println(repaire.toString());
				this.setChanged();
				this.notifyObservers("repaire = " + repaire.toCom());
			}
		}
	}
	
	public void envoiScore(){
		this.setChanged();
		this.notifyObservers("scores = " + this.getPartieCourante().toCom());
	}
	
	public void incActionEnCours()
	{
		Joueur oldJoueur = this.partieCourante.getJoueur();
		System.out.println("AVANT INC : joueur" + this.partieCourante.getJoueur().getID() + "   numTour:" + partieCourante.getJoueur().getNumTour() + "   action:" + this.partieCourante.getActionEnCours());
		this.partieCourante.incActionEnCours();
		this.envoiScore();
		System.out.println("JoueurID:" + Integer.toString(this.partieCourante.getJoueur().getID()));
		this.infoBateau(Integer.toString(this.partieCourante.getJoueur().getID()));
		if(this.partieCourante.configurationEnCours())
		{
			calculCredit();
		}
		
		if(!this.partieCourante.getJoueur().equals(oldJoueur))
		{
			this.setChanged();
			this.notifyObservers("changementJoueur = " + this.partieCourante.getJoueur().getNom());
		}
		
		System.out.println("APRES INC : joueur" + this.partieCourante.getJoueur().getID() + "   numTour:" + partieCourante.getJoueur().getNumTour() + "   action:" + this.partieCourante.getActionEnCours());
		
		
	}
	
	/*public void lancerPartie(String infoPartie) {
		String[] arrayPartie = infoPartie.split("-");
		if(arrayPartie.length == 2){
			if(arrayPartie[1].matches("[0-9]")){ // si c'est bien le nombre de joueur
				this.creerPartie(arrayPartie[0], Integer.parseInt(arrayPartie[1]));
				System.out.println("La partie "+this.partieCourante.getNom()+" a bien été créee avec "+this.partieCourante.getNbJoueurs()+" joueurs");
			}
			else{
				System.out.println("Le deuxieme parametre doit être le nombre de joueur");
			}
		}
		else{
			System.out.println("L'action lancerPartie doit contenir uniquement le nom de la partie et le nombre de joueurs. ");
		}
	}*/
}
